home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / amigadiskfont.mod (.txt) < prev    next >
Oberon Text  |  1996-06-02  |  4KB  |  106 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10i.Scn.Fnt
  3. Syntax10b.Scn.Fnt
  4. MODULE AmigaDiskFont;    (* updated OJ 30 Apr 96 *)
  5. IMPORT
  6.     SYSTEM, E := AmigaExec, G := AmigaGraphics;
  7.     diskFontBase- : E.LibraryPtr;
  8.     diskFontVersion- : INTEGER;
  9.     termEntry : E.TermEntry;
  10. CONST
  11.  diskFontName*="diskfont.library";
  12.  maxFontPath * = 256;    (* including null terminator *)
  13.   FontContentsPtr * = UNTRACED POINTER TO FontContents;
  14.   FontContents * = STRUCT
  15.     fileName * : ARRAY maxFontPath OF CHAR;
  16.     ySize * : INTEGER;
  17.     style * : SHORTSET;
  18.     flags * : SHORTSET
  19.   END;
  20.   TFontContentsPtr * = UNTRACED POINTER TO TFontContents;
  21.   TFontContents * = STRUCT
  22.     fileName * : ARRAY maxFontPath-2 OF CHAR;
  23.     tagCount * : INTEGER;
  24.     (*
  25.      *  if tfc_TagCount is non-zero, tfc_FileName is overlayed with
  26.      *  Text Tags starting at:  (struct TagItem * )
  27.      *      &tfc_FileName[MAXFONTPATH-(tfc_TagCount*sizeof(struct TagItem))]
  28.      *)
  29.     ySize * : INTEGER;
  30.     style * : SHORTSET;
  31.     flags * : SHORTSET
  32.   END;
  33. CONST
  34.   fchId     * = 00F00H;  (* FontContentsHeader, then FontContents *)
  35.   tfchId    * = 00F02H;  (* FontContentsHeader, then TFontContents *)
  36.   FontContentsHeaderPtr * = UNTRACED POINTER TO FontContentsHeader;
  37.   FontContentsHeader * = STRUCT
  38.     fileID * : INTEGER;         (* FCH_ID *)
  39.     numEntries * : INTEGER;     (* the number of FontContents elements *)
  40.  (* fc  * : ARRAY numEntries OF FontContents or
  41.     tfc * : ARRAY numEntries OF TFontContents    *)
  42.   END;
  43. CONST
  44.   dfhId       * = 00F80H;
  45.   maxFontName * = 32;     (* font name including ".font\0" *)
  46.   DiskFontHeaderPtr * = UNTRACED POINTER TO DiskFontHeader;
  47.   DiskFontHeader * = STRUCT (df * : E.Node)  (* node to link disk fonts *)
  48.     (* the following 8 bytes are not actually considered a part of the  *)
  49.     (* DiskFontHeader, but immediately preceed it. The NextSegment is   *)
  50.     (* supplied by the linker/loader, and the ReturnCode is the code    *)
  51.     (* at the beginning of the font in case someone runs it...          *)
  52.     (*   ULONG dfh_NextSegment;                 \* actually a BPTR      *)
  53.     (*   ULONG dfh_ReturnCode;                  \* MOVEQ #0,D0 : RTS    *)
  54.     (* here then is the official start of the DiskFontHeader...         *)
  55.     fileID * : INTEGER;         (* DFH_ID *)
  56.     revision * : INTEGER;       (* the font revision *)
  57.     segment * : E.BPTR;         (* the segment address when loaded *)
  58.     name * : ARRAY maxFontName OF CHAR; (* the font name (null terminated) *)
  59.     tf * : G.TextFont;          (* loaded TextFont structure *)
  60.   END;
  61. CONST
  62.   memory  * = 0;
  63.   disk    * = 1;
  64.   scaled  * = 2;
  65.   tagged  * = 16;       (* return TAvailFont *)
  66.   AvailFontPtr * = UNTRACED POINTER TO AvailFont;
  67.   AvailFont * = STRUCT
  68.     type * : SET;            (* MEMORY, DISK, or SCALED *)
  69.     attr * : G.TextAttr;     (* text attributes for font *)
  70.   END;
  71.   TAvailFontPtr * = UNTRACED POINTER TO TAvailFont;
  72.   TAvailFont * = STRUCT
  73.     type * : SET;          (* MEMORY, DISK, or SCALED *)
  74.     attr * : G.TTextAttr;  (* text attributes for font *)
  75.   END;
  76.   AvailFontsHeaderPtr * = UNTRACED POINTER TO AvailFontsHeader;
  77.   AvailFontsHeader * = STRUCT
  78.     numEntries * : INTEGER;      (* number of AvailFont elements *)
  79.  (* af  * : ARRAY numEntries OF AvailFont or
  80.     taf * : ARRAY numEntries OF TAvailFont   *)
  81.   END;
  82. PROCEDURE -ReturnD0    04EH,05EH,  04EH,075H;
  83. PROCEDURE OpenDiskFont*(VAR textAttr: G.TextAttr): G.TextFontPtr;
  84. BEGIN
  85.     SYSTEM.PUTREG( 8, SYSTEM.ADR(textAttr) );
  86.     SYSTEM.CALL( -30, diskFontBase );
  87.     ReturnD0
  88. END OpenDiskFont;
  89. PROCEDURE Init;
  90. TYPE LibraryPtr=POINTER TO E.Library;
  91. VAR lib:LibraryPtr;
  92. BEGIN
  93.     diskFontBase := E.OpenLibrary(diskFontName,37);
  94.     IF diskFontBase=0 THEN HALT(99) END;
  95.     lib:=SYSTEM.VAL(LibraryPtr,diskFontBase);
  96.     diskFontVersion:=lib.version
  97. END Init;
  98. PROCEDURE Term;
  99. BEGIN
  100.     E.CloseLibrary( diskFontBase )
  101. END Term;
  102. BEGIN
  103.     Init;
  104.     E.Register(termEntry, Term);
  105. END AmigaDiskFont.
  106.